/**
 * router_helper.js
 * 路由辅助工具 - PLM项目专用
 */

// 导入项目路由配置
const pathResolver = require('../config/path_resolver.js');
// 使用静态路径导入路由配置，而不是动态路径
const routes = require('../../../config/routes_config.js');

/**
 * 路由辅助工具
 */
const routerHelper = {
  /**
   * 导航到指定页面
   * @param {string} url - 页面路径
   * @param {object} params - 参数对象
   */
  navigateTo: function(url, params = {}) {
    const fullUrl = this._buildUrl(url, params);
    console.log('[路由] 导航到:', fullUrl);
    
    wx.navigateTo({
      url: fullUrl,
      fail: (err) => {
        console.error('[路由] 导航失败:', err);
        // 导航失败时可能是层级过多，尝试使用重定向
        this.redirectTo(url, params);
      }
    });
  },
  
  /**
   * 关闭当前页面，跳转到应用内的某个页面
   * @param {string} url - 页面路径
   * @param {object} params - 参数对象
   */
  redirectTo: function(url, params = {}) {
    const fullUrl = this._buildUrl(url, params);
    console.log('[路由] 重定向到:', fullUrl);
    
    wx.redirectTo({
      url: fullUrl,
      fail: (err) => {
        console.error('[路由] 重定向失败:', err);
      }
    });
  },
  
  /**
   * 关闭所有页面，打开到应用内的某个页面
   * @param {string} url - 页面路径
   * @param {object} params - 参数对象
   */
  reLaunch: function(url, params = {}) {
    const fullUrl = this._buildUrl(url, params);
    console.log('[路由] 重启到:', fullUrl);
    
    wx.reLaunch({
      url: fullUrl,
      fail: (err) => {
        console.error('[路由] 重启失败:', err);
      }
    });
  },
  
  /**
   * 跳转到tabBar页面
   * @param {string} url - tabBar页面路径
   */
  switchTab: function(url) {
    let fullUrl = url;
    
    // 确保URL格式正确
    if (!url.startsWith('/')) {
      fullUrl = '/' + url;
    }
    
    console.log('[路由] 切换到TabBar:', fullUrl);
    
    wx.switchTab({
      url: fullUrl,
      fail: (err) => {
        console.error('[路由] 切换TabBar失败:', err);
      }
    });
  },
  
  /**
   * 返回上一页
   * @param {number} delta - 返回的页面数
   */
  navigateBack: function(delta = 1) {
    console.log('[路由] 返回页面数:', delta);
    
    wx.navigateBack({
      delta: delta,
      fail: (err) => {
        console.error('[路由] 返回失败:', err);
      }
    });
  },
  
  /**
   * 构建完整URL
   * @param {string} url - 页面路径
   * @param {object} params - 参数对象
   * @returns {string} 完整的URL
   * @private
   */
  _buildUrl: function(url, params) {
    // 确保URL格式正确
    let fullUrl = url;
    if (!url.startsWith('/')) {
      fullUrl = '/' + url;
    }
    
    // 添加项目前缀，如果url中已有projects/则不添加
    if (!fullUrl.includes('/projects/')) {
      fullUrl = '/projects/plm' + fullUrl;
    }
    
    // 添加参数
    if (params && Object.keys(params).length > 0) {
      const queryParams = Object.keys(params)
        .filter(key => params[key] !== undefined && params[key] !== null)
        .map(key => {
          // 对特殊字符进行编码
          const value = typeof params[key] === 'object' 
            ? encodeURIComponent(JSON.stringify(params[key]))
            : encodeURIComponent(params[key]);
          return `${encodeURIComponent(key)}=${value}`;
        })
        .join('&');
      
      if (queryParams) {
        fullUrl += (fullUrl.includes('?') ? '&' : '?') + queryParams;
      }
    }
    
    return fullUrl;
  },
  
  /**
   * 获取当前页面路径
   * @returns {string} 当前页面路径
   */
  getCurrentPage: function() {
    const pages = getCurrentPages();
    if (pages.length === 0) return '';
    return '/' + pages[pages.length - 1].route;
  },
  
  /**
   * 获取项目ID
   * @returns {string} 项目ID
   */
  getPID: function() {
    const currentPage = this.getCurrentPage();
    if (currentPage.startsWith('/projects/')) {
      const parts = currentPage.split('/');
      if (parts.length >= 3) {
        return parts[2]; // 返回 'plm'
      }
    }
    return 'plm'; // 默认返回 'plm'
  }
};

// 导出模块
module.exports = routerHelper; 